It can be useful to be able to identify the code produced by different compilers to identify non-licensed uses of the compilers, and to track errors. Accordingly, compiler manufacturers require a method of including a serial number or other identifying mark in code produced by a compiler. Additionally, a method of analyzing a copy of the compiled code to determine the serial number or identifying mark is also required.
A private watermark, which is data hidden via steganography, is one method for tracking the outputs of licensed programs. However traditional steganography requires the presence of “low order” bits in the data stream. The low order bits can be changed without the data changing so much that a human can notice the difference. The changed bits, detected when the modified field is compared to the original, can hold the steganographic data. Since traditional stenography changes non-significant low-order bits, steganography is normally applied to digital pictures and sounds.
Steganography in computer code can't be done with the normal methods because computer code does not contain low-order bits. Every bit in the code is important, and flipping even one bit can prevent the code from operating correctly.
Accordingly, improved techniques for inserting identifying watermarks in compiled programs is needed.